/*
InitQueue(&Q)
DestroyQueue(&Q)
QueueEmpty(Q)
QueueLength(Q)
GetHead(Q, &e)
ClearQueue(&Q)
EnQueue(&Q, e)
DeQueue(&Q, &e)
QueueTravers(Q)
*/
#define MAXQSIZE 100  //最大队列长度
typedef struct //队列的顺序存储
{
	ElemType *base;  // 动态分配存储空间
	int front;     // 头指针，若队列不空，指向队列头元素
	int rear;      // 尾指针，若队列不空，指向队列尾元素的下一个位置
	int queuesize; 
} SqQueue;

	/*队列的链式存储*/
/*
		//结点类型
typedef struct QNode{
    ElemType      data;
    struct QNode  *next;
  } QNode, *QueuePtr;
		//链队列类型
typedef struct { 
    QueuePtr  front;  // 队头指针
    QueuePtr  rear;   // 队尾指针
} LinkQueue;
 */

Status InitQueue (SqQueue *Q,  int maxsize) // 构造最大存储空间为 maxsize 的空循环队列 
{
 	Q->base = (ElemType*)malloc(sizeof(ElemType)*maxsize);
	if (!Q->base) 
		exit (OVERFLOW);  
	Q->queuesize = maxsize;
	Q->front = Q->rear = 0;
	return OK;
}

Status EnQueue (SqQueue *Q, ElemType e)   // 插入元素 e 为 Q 的新的队尾元素
{    
	if ((Q->rear+1) % Q->queuesize == Q->front) 
		return ERROR; //队列满
	Q->base[Q->rear] = e;
	Q->rear = (Q->rear+1) % Q->queuesize;
	return OK;
}